/**
 * 路由导航守卫
 * @function
 * @param {VueRouter} router 路由实例
 */
// 获取取消正在执行的函数逻辑
import { cancelFn } from '@u/axios'
import { isExternal } from '@u/url'

// 白名单
import { whiteRouter } from './whiteRouter'

//进度条
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
NProgress.configure({ showSpinner: false })

/**
 * 获取版本号
 */
import versionTood from './versionUpdate'
import { TITLE } from '@/config'

export default function (router) {
	/**
	 * 全局前置守卫
	 */
	router.beforeEach(async (to, from, next) => {
		// 外链地址
		if (isExternal(to.path)) {
			window.open(to.path, '_block')
		} else {
			document.title = TITLE || to.meta.title

			// 缓存页面
			if (to.meta?.keepAlive && !$store.guarder.cachedComponents.includes(to.name)) {
				$store.guarder.cachedComponents.push(to.name)
			}

			// 缓存页面--跳转非子页面清空缓存
			if (!(to.meta?.title?.includes(from.meta.title) && to.meta?.title?.includes('-')) && from.meta?.keepAlive) {
				const index = $store.guarder.cachedComponents.indexOf(from.name)
				if (index !== -1) $store.guarder.cachedComponents.splice(index, 1)
			}

			// 开启进度条
			NProgress.start()

			// 清除正在进行中的所有请求
			cancelFn()

			//判断当前代码版本是否与服务器中代码版本一致，如不一致则刷新页面获取最新
			versionTood()

			/** 已经登录了存在token */
			// if ($store.user.token) {
			// 	// 判断当前用户是否已拉取完user_info信息
			// 	if (!$store.user.rolesGets.length) await $store.user.GetInfo()

			// 	// 生成对应权限的路由
			// 	if (!$store.guarder.Menus.length) {
			// 		await $store.guarder.GenerateRoutes()

			// 		// hack方法 确保addRoutes已完成
			// 		next({ ...to, replace: false })
			// 	} else {
			// 		next()
			// 	}
			// } else {
			// 	if (whiteRouter(to.path)) {
			// 		// 在免登录白名单，直接进入
			// 		next()
			// 	} else {
			// 		next({
			// 			name: '/login',
			// 			query: { redirect: to.fullPath }
			// 		})
			// 	}
			// }
			next()
		}
	})

	/**
	 * 全局后置守卫
	 */
	router.afterEach(() => {
		NProgress.done()
		window.scroll(0, 0)
	})
}
